草庐IT

MIPS 指令

全部标签

c++ - 预处理器指令的替代方法

我正在从事在Symbian平台上开发C++手机应用程序。要求之一是它必须适用于从第2版手机到第5版手机的所有Symbian手机。现在,不同版本的SymbianSDK存在差异。我必须使用预处理器指令有条件地编译与正在为其构建应用程序的SDK相关的代码,如下所示:#ifdefS60_2nd_EDCode#elifS60_3rd_EDCode#elseCode现在,由于我正在开发的应用程序并不简单,它很快就会增长到数万行代码,并且像上面这样的预处理器指令将遍布各处。我想知道在这种情况下是否有任何替代方法或者可能是使用这些预处理器指令的更好方法。请帮忙。 最佳答案

c++ - 无符号数学是否需要更多 CPU 指令?

取一个C++整数变量i,并假设您将其值乘以2。如果i有符号,我相信这个操作在某种程度上等价于,至少在数学上,到:i=i但是如果i的类型是无符号的,那么由于无符号值不会溢出而是以其范围为模执行,大概操作是这样的:i=(i现在,我认为实际的机器指令可能比乘法的移位序列更简洁。但是现代的,比如x86,CPU是否有针对无符号/模数学的特定指令?或者,与使用有符号值的数学运算相比,使用无符号值执行数学运算是否会花费额外的指令?(是的,在编程时关心这个是荒谬的;我出于纯粹的好奇心感兴趣。) 最佳答案 正如其他人已经写的那样:这对CPU来说无关紧

c++ - 等同于 PEXT Haswell 指令的标准 C++11 代码(并且可能会被编译器优化)

Haswell架构提供了几个新的指令。其中之一是PEXT(parallelbitsextract),这张图片解释了它的功能(来源here):它接受一个值r2和一个掩码r3并将提取的r2位放入r1中。我的问题如下:纯标准C++11中优化模板函数的等效代码是什么,将来编译器可能会针对该指令进行优化. 最佳答案 这里是somecode来自MatthewFioravante的stdcxx-bitopsGitHubrepo那是floatedtothestd-proposals邮件列表作为为C++添加constexpr位运算库的初步建议。#if

c++ - 您将如何编写可能优化为一条 SSE 指令的无符号加法代码?

在C或C++中,如何将两个数组的无符号加法编写为一个128位SSE无符号加法指令(例如GCC)优化的代码? 最佳答案 //Nnumberofintstobeadded//a,binputarray//csumarray//nRegnumberofrequiredvectorregistersconstunsignednReg=N*sizeof(uint32_t)/sizeof(__v4si);__v4sia[nReg],b[nReg],c[nReg];for(unsignedi=0;i根据需要展开循环和预取元素。建议进行分析。将__

c++ - 如何让 gdb tui 汇编输出显示指令?

我想查看程序集输出,但发现在TUI中,它会输出functionsignature+offset:这很酷,除了我用C++编程和函数签名已完全解决,因此我获得了namespace和模板参数,它们使函数sig长了2行或更多行。这当然会在TUI中被截断,因此它甚至无法显示汇编指令。有什么方法可以缩短、更改前缀(可能是文件/行格式)或根本不将此前缀输出到汇编指令? 最佳答案 虽然目前无法截断此前缀,但解决方法是使用focusasm命令将焦点设置到程序集窗口(如果asm窗口不是focus),然后使用向右箭头键,您可以将窗口向右滚动,最终将显示程

c++ - 根据支持的指令选择要使用的程序集实现

我正在开发一个C库,它编译/链接到一个.a文件,用户可以静态链接到他们的代码中。该库的性能非常重要,因此我在x86-64汇编中编写性能关键例程以优化性能。对于某些例程,与坚持使用“标准”x86-64指令集相比,如果我使用BMI2指令,我可以获得明显更好的性能。问题是,BMI2是最近才引入的,我的一些用户使用的处理器不支持这些指令。因此,我编写了优化例程两次,一次使用BMI2指令,一次不使用它们。在我当前的设置中,我将分发两个版本的.a文件:一个需要支持BMI2指令的“快速”版本和一个不需要支持BMI2指令的“慢速”版本。我想问是否有一种方法可以通过分发单个.a文件来简化此过程,该文件将

c++ - 将 'using' 指令与部分重载 : gcc feature or intel bug? 相结合

我希望将一组用C++编写的库与英特尔编译器一起使用。我附上了演示问题的示例代码。库中有很多地方使用了“using”指令与部分重载的组合(例如,我想使用基类中的foo(void)方法,但在派生类中重新实现第二个版本fofoo).gcc没有问题,但intel有。#includetemplatestructInterface{staticconstFf=10;};templatestructBase:publicInterface{voidfoo(void){std::coutvoidfoo(Interface&ii){std::coutstructDerived:publicBase{//

c++ - 编译器没有实现 "using typename"指令吗?

我有一些看起来像这样的代码:namespacemyLibrary{classA{public:structNested{...};...};}在代码的其他部分,我需要访问A。因为我喜欢可读性代码,所以我也喜欢using指令:usingmyLibrary::A;...Aa;现在,在某些时候我还需要访问我的嵌套类,所以我想写这样的东西:usingmyLibrary::A::Nested;显然,编译器无法知道这是一个嵌套类而不是类成员,因此报错:error:usingdeclarationcannotrefertoclassmember我不明白的是为什么这不能解决问题:usingtypena

c++ - 是否有任何控制循环展开的预处理器指令?

此外,假设循环中的所有操作完全独立于其他迭代,编译器如何确定展开循环的范围。 最佳答案 对于MSVC,只有vector独立性提示:http://msdn.microsoft.com/en-us/library/hh923901.aspx#pragmaloop(ivdep)对于许多其他编译器,例如Intel/ibm,有几个用于优化循环的pragma提示:#pragmaunroll#pragmaloopcountN#pragmaivdepMSVC++人员有一个关于展开启发式的线程:http://social.msdn.microsoft

c++ -/Za编译器指令在VS2010中不编译系统头文件

我想禁用语言扩展以便能够在我的项目中进行一些测试。我发现我必须从http://msdn.microsoft.com/en-us/library/0k0w269d.aspx设置/Za编译器指令,但在此之后,如果我包含Windows标题,我会出错。有没有办法在VS2010中编写符合标准的代码(由编译器强制执行,而不是由其他程序员/代码审查强制执行)并且仍然使用系统头文件?谢谢! 最佳答案 Windowsheader从未使用/Za编译过。/Za还存在其他问题,导致Microsoft停止使用该选项测试其C++标准库。如这里所述:http:/